#include "OLEDDisplay.h"

OLEDDisplay::OLEDDisplay(uint8_t addr, uint8_t sda, uint8_t scl)
    : _display(128, 64, &Wire, -1), _addr(addr), _sda(sda), _scl(scl) {}

bool OLEDDisplay::begin() {
    Wire.begin(_sda, _scl);
    if (!_display.begin(SSD1306_SWITCHCAPVCC, _addr)) {
        Serial.println("[OLED] 初始化失败");
        return false;  // 初始化失败
    }
    Serial.println("[OLED] 初始化成功");
    _display.setTextColor(WHITE);
    clear();
    return true;
}

void OLEDDisplay::clear() {
    _display.clearDisplay();
    _display.display();
}

// 显示WiFi状态（SSID + IP + 连接状态）
void OLEDDisplay::showWiFiInfo(const char* ssid,
                               const char* ip,
                               bool connected) {
    _display.clearDisplay();

    // 第一行：标题 + 动态图标
    _display.setCursor(0, 0);
    _display.print("WiFi Status");
    _display.drawBitmap(
        128 - 16, 0, connected ? wifi_connected_icon : wifi_disconnected_icon,
        16, 16, SSD1306_WHITE);

    // 第二行：SSID（自动截断超长内容）
    _display.setCursor(0, 16);
    _display.printf("SSID: %.12s", ssid);

    // 第三行：IP地址
    _display.setCursor(0, 32);
    _display.printf("IP: %s", ip);

    // 第四行：信号强度/错误状态
    _display.setCursor(0, 48);
    if (connected) {
        _display.printf("RSSI: %ddBm", WiFi.RSSI());
    } else {
        _display.print("Disconnected!");
    }

    _display.display();
}
